// import VueRouter from "vue-router";

export default class BaseUtils {
  public static s2i(s: string): number {
    if( !s || s.length === 0 ){
      return -1;
    }
    return parseInt(s);
  }


  public static defaultLabels(): string[] {
    let dn = new Date();
    let ar: string[] = [];
    let m = dn.getMonth() + 1;
    let c = new Date(dn.getFullYear(), m, 0);
    let lastDayOfMonth = c.getDate();
    // ar.push(mItemOrderSuccess + "/1");
    // ar.push(mItemOrderSuccess + "/10");
    // ar.push(mItemOrderSuccess + "/20");
    let non: any = null;
    for (let i = 1; i <= lastDayOfMonth; i++) {
      //if( i === 1 || i % 10 === 0 ){
      ar.push(m + "/" + i);
      // }else {
      //   ar.push(non);
      // }
    }

    //ar.push(mItemOrderSuccess + "/" + lastDayOfMonth);
    return ar;
  }
  public static sortByDay(arData: any[]) {
    let cs = arData.sort((a: any, b: any): number => {
      if (a.day < b.day) return -1;
      if (a.day > b.day) return 1;
      return 0;
    });
    return cs;
  }

  // public static configLineChart(
  //   yLabelFun?: (label: string, index: number, labels: string[]) => string,
  //   stepSize?: number
  // ): any {
  //   let xstepSize = 5;
  //   if (stepSize) {
  //     xstepSize = stepSize;
  //   }
  //   let options = {
  //     //-ax,hiden point
  //     elements: {
  //       point: {
  //         radius: 0,
  //       },
  //     },
  //     title: {
  //       display: false,
  //     },
  //     responsive: true,
  //     scales: {
  //       xAxes: [
  //         {
  //           display: true,
  //           scaleLabel: {
  //             display: true,
  //           },
  //           gridLines: {
  //             display: false,
  //             // lineWidth: [1, 0]
  //           },
  //           // autoSkip: true,
  //           ticks: {
  //             autoSkip: false,
  //             userCallback: function(
  //               label: string,
  //               index: number,
  //               labels: string[]
  //             ) {
  //               if (labels.length < 6) {
  //                 return label;
  //               }
  //               if (index === 0 || index === labels.length - 1) {
  //                 //console.log("index==>" + index + ",label=" + label);
  //                 return label;
  //               }
  //               if (index === 9 || index === 19) {
  //                 //console.log("index==>" + index + ",label=" + label);
  //                 return label;
  //               }
  //               return "";
  //             },
  //           },
  //         },
  //       ],
  //       yAxes: [
  //         {
  //           gridLines: {
  //             display: true,
  //             lineWidth: [1, 0, 0],
  //           },
  //           ticks: {
  //             beginAtZero: true,
  //             zeroLineWidth: 2, //-ax,有点用，开始于y-axios有点空隙
  //             stepSize: xstepSize,
  //             min: 0,
  //             userCallback: function(
  //               label: string,
  //               index: number,
  //               labels: string[]
  //             ) {
  //               if (yLabelFun) {
  //                 return yLabelFun(label, index, labels);
  //               }
  //             },
  //           },
  //         },
  //       ],
  //     },
  //     legend: {
  //       display: false, //ax,not show
  //     },
  //   };
  //   return options;
  // }

  // //-ax,部分情况下，lineChart没有完全占满空间，这里设置一下
  // public static resetChartsHeight(charts: any, parent: any) {
  //   if (!charts || !parent) return;
  //   let ch = charts.clientHeight;
  //   let cp = parent.clientHeight;
  //   let canvasOverHeight = cp - ch;
  //   if (canvasOverHeight > 32) {
  //     let parentNeedHeight = ch + 8;
  //     parent.style = "height: " + parentNeedHeight + "px;margin-top:16px;";
  //   }
  // }

  public static isNullOrEmptyObj(obj: any): boolean {
    if (!obj) return true;
    if (obj && obj !== null) {
      return false;
    }
    return true;
  }

  // public static mainRouter(r: VueRouter, accountType: number) {
  //   let v = accountType;
  //   console.log("mainRouter =>create: " + v);
  //   if (v === 1) {
  //     r.push({ name: "Home" });
  //     return;
  //   } else if (v === 2 || v === 3) {
  //     r.push({ name: "teacher" });
  //     return;
  //   } else if (v === 4) {
  //     r.push({ name: "doctor" });
  //     return;
  //   } else if (v === 5) {
  //     r.push({ name: "director" });
  //     return;
  //   }
  //   let xv = "undefined";
  //   if (v) {
  //     xv = v.toString();
  //   }
  //   // this.$router.push({ name: "xuser", query: { accountType: xv } });
  //   r.push({ name: "login", query: { accountType: xv } });
  // }

  // public static sleepMatBabyIsOnBedStatus(status: string): string {
  //   if (!status) return "-";
  //   const xs = status.toUpperCase();
  //   const ste: { [key: string]: number } = {
  //     SLEEPING: 0,
  //     MOVEMENT: 1,
  //     ABSENCE: 2,
  //     JUDGEMENT: 3,
  //     "TIME TO SLEEP": 4,
  //     "ERROR 1": 6,
  //     "ERROR 8": 7,
  //     "E1": 6,
  //     "E8": 7,
  //     "INACTIVE":8
  //   };
  //   //-0睡眠  1活动  2离开  3检测中   4准备入睡   6或者7 睡垫异常
  //   const stc: { [key: number]: string } = {0:"睡眠",1:"活动",2:"离开",3:"检测中",4:"准备入睡", 6:"睡垫异常",7:"睡垫异常",8:"无数据"};
  //   if( xs in ste) {
  //     let pos = ste[xs];
  //     if( pos in stc) {
  //       return stc[pos];
  //     }
  //   }
  //   return xs;
  // }

  public static UNIQ():string{
    return UNIQKEY();
  }
  
}
class BaseCounter {
  mCounter: number = 0;
  private constructor(){
    this.mCounter = Math.random()*1000 * Math.random();
  }
  static _instance: BaseCounter;
  public static instance(): BaseCounter {
    if( BaseCounter._instance)return BaseCounter._instance;
    BaseCounter._instance = new BaseCounter();
    return BaseCounter._instance;
  }
  get counter(): number {
    const c = this.mCounter++;
    return  c;
  }
}
export class GUID {
  private str: string;

  constructor(str?: string) {
      this.str = str || GUID.getNewGUIDString();
  }

  toString() {
      return this.str;
  }

  private static getNewGUIDString() {
      // your favourite guid generation function could go here
      // ex: http://stackoverflow.com/a/8809472/188246
      let d = new Date().getTime();
      const dr = (Math.random()*Math.PI)*d + d*Math.random();
      d += dr + BaseCounter.instance().counter;
      if (window.performance && typeof window.performance.now === "function") {
          d += performance.now(); //use high-precision timer if available
      }
      return d.toString();
      // return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
      //     let r = (d + Math.random() * 16) % 16 | 0;
      //     d = Math.floor(d/16);
      //     return (c=='x' ? r : (r & 0x3 | 0x8)).toString(16);
      // });
  }
}

export function UNIQKEY():string {
  return new GUID().toString();
  // return BaseCounter.instance().counter;
}